package me.qixiaobo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

/**
 * Controller公共组件
 */
public abstract class BaseController {

    /**
     * request
     */
    @Autowired
    protected HttpServletRequest request;
    /**
     * response
     */
    protected HttpServletResponse response;
    /**
     * session
     */
    protected HttpSession session;


    /**
     * 页面跳转
     */
    public String redirect(String url)
    {
        return String.format("redirect:%s", url);
    }

    /**
     * 取得session中的值
     *
     * @param name
     * @return
     */
    public Object getSession(String name) {
        return session.getAttribute(name);
    }

    /**
     * 往session中添加键值对
     *
     * @param name
     * @param obj
     */
    public void setSession(String name, Object obj) {
        session.setAttribute(name, obj);
    }

    /**
     * 移除session里的key
     *
     * @param name
     */
    public void removeSession(String name) {
        session.removeAttribute(name);
    }

    /**
     * 初始化session
     */
    public void clearSession() {
        session.invalidate();
    }

    @ModelAttribute
    public void init(HttpServletRequest request, HttpServletResponse response)
            throws UnsupportedEncodingException {
        this.request = request;
        this.response = response;
        this.session = request.getSession();
    }

    /**
     * 将前台传递过来的日期格式的字符串，自动转化为Date类型
     */
//    @InitBinder
//    public void initBinder(WebDataBinder binder) {
//        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        dateFormat.setLenient(false);
//        //注册自定义的编辑器
//        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
//    }

   /* 这种方式的优点是：可以全局统一处理，不用再关注具体需要转换的日期字段
    缺点就是：只能定义一种日期类型，我定义了”yyyy-MM-dd”就没法定义”yyyy-MM-dd HH:mm:ss”，
    如果我前台不同页面过来的日期格式不一样就不好办了
*/

    /**
     * 取得访问项目的url
     */
    public String getBaseUrl() {
        return request.getScheme() + "://" + request.getServerName() + ":"
                + request.getServerPort() + request.getContextPath();
    }

}
